package cn.com.dhcc.ddi.datasource.dao;

import java.util.List;

import org.springframework.stereotype.Repository;

import cn.com.dhcc.app.core.dao.BaseDao;
import cn.com.dhcc.app.core.exception.DaoException;
import cn.com.dhcc.app.core.handler.modulehandler.WhereCondition;
import cn.com.dhcc.app.pub.CM;
import cn.com.dhcc.ddi.datasource.vo.TableColVo;

/**
 * @日期：2016/11/15 16:52
 * @作者：张洪涛
 * @版权所有：东华软件
 * @版本：1.0
 */
@Repository
public class TableColDao extends BaseDao {
    public List<TableColVo> getColsByTableId(String tabId) throws DaoException {
        String sql = "select t.* from "+SI_TABLE("t_ddi_table_col") + " t where t.table_id=? order by t.is_pk desc, t.col_name ";
        try {
            return CM.getDao().listModule("获取发送性任务-发送表字段信息", sql,
                    TableColVo.class, new Object[] {tabId});
        } catch (DaoException e) {
            throw e;
        }
    }
    
    /**
	 * 
	 * @Title: insertTableColInfo
	 * @Description: 数据源表字段信息入库
	 * @param @param tbColInfoList
	 * @param @throws DaoException 参数
	 * @return void 返回类型
	 * @throws
	 */
	public int insertTableColInfo(List<Object[]> tbColInfoList) throws DaoException {
		String sql = "insert into "+ SI_TABLE("t_ddi_table_col")+ "(id,table_id,col_name,col_type,col_comment,is_pk,is_ic,fk_table_name,fk_tablecol_name,mtime,col_default) " +
				        "values(?,?,?,?,?,?,?,?,?,?,?)";
		return CM.getDao().batchInsert("数据源表字段信息入库", sql, tbColInfoList);
		
	}
	
	/**
	 * 
	 * @Title: insertTableColInfo
	 * @Description: 数据源表字段信息入库
	 * @param @param tbColInfoList
	 * @param @return
	 * @param @throws DaoException 参数
	 * @return int 返回类型
	 * @throws
	 */
	public int insertTableColInfo(TableColVo vo) throws DaoException {
		String sql = "insert into "+ SI_TABLE("t_ddi_table_col")+ "(id,table_id,col_name,col_type,col_default,col_comment,is_pk,is_ic,fk_table_name,fk_tablecol_name,mtime) " +
				        "values(?,?,?,?,?,?,?,?,?,?,?)";
		return CM.getDao().insert("数据源表字段信息入库", sql, new Object[]{vo.getId(), vo.getTableId(), vo.getColName(), vo.getColType(), vo.getColDefault(), vo.getColComment(),
				                   vo.getIsPk(), vo.getIsIc(), vo.getFkTableName(), vo.getFkTablecolName(), vo.getMtime()});
		
	}

	/**
	 * 
	 * @Title: updateTableColInfo
	 * @Description: 数据源表字段信息入库
	 * @param @param tbColInfoList
	 * @param @return
	 * @param @throws DaoException 参数
	 * @return int 返回类型
	 * @throws
	 */
    public int updateTableColInfo(TableColVo vo) throws DaoException {
		String sql = "update "+ SI_TABLE("t_ddi_table_col")+ " set col_type=?, col_default=?, col_comment=?, is_pk=?, is_ic=?, " +
				      " fk_table_name=?, fk_tablecol_name=?, mtime=? where col_name=? and table_id = (select id from "+SI_TABLE("t_ddi_table_info")+" " +
    			      " where ds_id = ? and table_name = ?) ";
		return CM.getDao().update("数据源表字段信息入库", sql, new Object[]{vo.getColType(), vo.getColDefault(), vo.getColComment(), vo.getIsPk(), vo.getIsIc(), vo.getFkTableName(),
				                  vo.getFkTablecolName(), vo.getMtime(), vo.getColName(), vo.getDsId(), vo.getTableName()});
	}
    
	/**
	 * 
	 * @Title: deleteTbColInfoById
	 * @Description: 根据tableId删除表字段信息
	 * @param @param id
	 * @param @throws DaoException 参数
	 * @return void 返回类型
	 * @throws
	 */
    public int deleteTbColInfoByTbId(String tableId) throws DaoException{
    	String sql = "delete from "+ SI_TABLE("t_ddi_table_col")+ " where table_id = ? ";
  		return CM.getDao().delete("根据tableId删除表字段信息", sql, new Object[]{ tableId });
    }
    
	/**
	 * 
	 * @Title: deleteTbColInfo
	 * @Description: 删除表字段信息
	 * @param @param tableId
	 * @param @param colName
	 * @param @return
	 * @param @throws DaoException 参数
	 * @return int 返回类型
	 * @throws
	 */
    public int deleteTbColInfo(String tableId, String colName) throws DaoException{
    	String sql = "delete from "+ SI_TABLE("t_ddi_table_col")+ " where table_id = ? and col_name = ? ";
  		return CM.getDao().delete("删除表字段信息", sql, new Object[]{ tableId, colName });
    }
    
	/**
	 * 
	 * @Title: getCount
	 * @Description: 根据tableId、colName查询列数量
	 * @param @param tableId
	 * @param @param colName
	 * @param @return
	 * @param @throws DaoException 参数
	 * @return int 返回类型
	 * @throws
	 */
    public int getCount(String dsId,String tableName, String colName) throws DaoException{ 
    	String sql = "select count(*) from "+SI_TABLE("t_ddi_table_col") + " where table_id = (select id from "+SI_TABLE("t_ddi_table_info") +" " +
    			        " where ds_id = ? and table_name = ?) and col_name = ? ";
        return CM.getDao().queryForInt("根据tableId、colName查询列数量", sql, new Object[]{dsId, tableName, colName});
    }
    
	/**
	 * 
	 * @Title: getColNamesByTbId
	 * @Description: 获取字段名
	 * @param @param tableId
	 * @param @return
	 * @param @throws DaoException 参数
	 * @return List<String> 返回类型
	 * @throws
	 */
	public List<String> getColNamesByTbId(String tableId) throws DaoException{
	    String sql = "select col_name from " + SI_TABLE("t_ddi_table_col") + " where table_id = ? ";
	    return CM.getDao().listSignleStringColumn("获取字段名", sql, new WhereCondition(), new Object[]{tableId});
	}
}
